import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { ElMessage } from 'element-plus'
import { getCurrentUserApi, updateUserApi } from '@/api/login'
import { handleApiError, handleSuccess } from '@/utils/errorUtils'
import { tokenManager } from '@/utils/request'
import { useLoginStore } from '@/stores/login/loginStore'

export const useProfileStore = defineStore('profile', () => {
  // 状态定义
  const userInfo = ref(JSON.parse(localStorage.getItem('userInfo') || '{}'))
  const submitting = ref(false)

  // 获取角色名称
  const getRoleName = (role) => {
    const roleMap = {
      1: '超级管理员',
      2: '管理员',
      3: '普通用户'
    }
    return roleMap[role] || '未知角色'
  }

  // 获取角色标签类型
  const getRoleTagType = (role) => {
    const typeMap = {
      1: 'danger',
      2: 'warning',
      3: 'success'
    }
    return typeMap[role] || 'info'
  }

  // 格式化日期
  const formatDate = (dateString) => {
    if (!dateString) return 'N/A'
    const date = new Date(dateString)
    return date.toLocaleDateString('zh-CN', {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit',
      hour: '2-digit',
      minute: '2-digit'
    })
  }


  // 头像加载失败处理
  const onAvatarError = () => {
    console.log('头像加载失败')
    userInfo.value.avatar = ''
  }

  // 头像上传处理（预览用，不实际上传）
  const handleAvatarUpload = async (file) => {
    // 文件类型验证
    const isImage = file.type.startsWith('image/')
    if (!isImage) {
      ElMessage.error('只能上传图片文件!')
      return false
    }

    // 文件大小验证 (5MB)
    const isLt5M = file.size / 1024 / 1024 < 5
    if (!isLt5M) {
      ElMessage.error('图片大小不能超过 5MB!')
      return false
    }

    // 创建预览URL
    const reader = new FileReader()
    reader.onload = (e) => {
      userInfo.value.avatar = e.target.result
    }
    reader.readAsDataURL(file)
    
    // 保存文件对象供后续使用
    userInfo.value.avatarFile = file
    
    return true
  }

  // 获取用户信息
  const loadUserInfo = async () => {
    try {
      const response = await getCurrentUserApi()
      const user = response.data?.user_info || response.user_info || response
      userInfo.value = user
      if (user) {
        localStorage.setItem('userInfo', JSON.stringify(user))
        // 同步更新loginStore的userInfo
        const loginStore = useLoginStore()
        loginStore.userInfo = user
      }
    } catch (error) {
      handleApiError(error, '获取用户信息失败')
    }
  }

  // 更新用户信息（支持头像上传）
  const updateProfile = async (formData) => {
    submitting.value = true
    try {
      // 创建FormData对象，支持文件上传
      const submitData = new FormData()
      
      // 添加表单字段
      Object.keys(formData).forEach(key => {
        if (formData[key] !== null && formData[key] !== undefined && formData[key] !== '') {
          submitData.append(key, formData[key])
        }
      })
      
      // 如果有头像文件，添加到FormData
      if (userInfo.value.avatarFile) {
        submitData.append('avatar', userInfo.value.avatarFile)
        // 清除临时文件对象
        userInfo.value.avatarFile = null
      }
      
      await updateUserApi(submitData)
      await loadUserInfo()
      handleSuccess('个人信息保存成功')
    } catch (error) {
      handleApiError(error, '保存失败')
    } finally {
      submitting.value = false
    }
  }

  return {
    // 状态
    userInfo,
    submitting,
    
    // 工具方法
    getRoleName,
    getRoleTagType,
    formatDate,
    
    // 头像方法
    onAvatarError,
    handleAvatarUpload,
    
    // API方法
    loadUserInfo,
    updateProfile
  }
})